ASP.NET MVC рдореЗрдВ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛
AuthorizeAttribute
рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ)ред рдЕрдзрд┐рдХрд╛рд░ рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред Visual Studio рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ, ASP.NET MVC 3 рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯрд╛рдЗрдк рдХрд░реЗрдВ,
рдбрд╛рдпрдирд╛рдорд┐рдХрдСрдерд░рд╛рдЗрдЬ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ , рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд, рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рдЖрджрд┐ рдореЗрдВред рдпрд╣ рд╕рдм рдХрд╛рд░реНрдп рдФрд░ рдЖрдкрдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрди рддрдВрддреНрд░реЛрдВ рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
PermissionManager
рд╡рд░реНрдЧ рд╣реА:
public class PermissionManager { public bool ValidatePermissions(string controller, string action, string user) { bool isUserAccess = false; if (user == "user1" && controller == "Home") { switch (action) { case "Test": isUserAccess = true; break; } } if (user == "user2" && controller == "Home") { switch (action) { case "Edit": isUserAccess = true; break; } }
рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, MVC рдореЗрдВ рдПрдХ
IAuthorizationFilter
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдПрдХрд▓
OnAuthorization
рд╡рд┐рдзрд┐
OnAuthorization
ред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдареАрдХ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд, рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╡рд░реНрдЧ
public class DynamicAuthorizeAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { PermissionManager permissionManager = new PermissionManager(); string action = filterContext.ActionDescriptor.ActionName; string controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; string user = filterContext.HttpContext.User.Identity.Name; if (!permissionManager.ValidatePermissions(controller, action, user)) { throw new UnauthorizedAccessException(" "); } } }
AuthorizationContext
рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдЧреБрдг рд╣реИрдВ рдЬреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рддреНрдпрд╛рдкрди рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ, рд╣рдо рд╕рд┐рд░реНрдл
PermissionManager
рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП
Home
рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ (рджреЛ рдХреГрдкрдпрд╛ рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдереЗ):
public ActionResult Test() { return View(); } public ActionResult Edit() { return View(); }
рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдЕрднреНрдпрд╛рд╡реЗрджрди рдмрдирд╛рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛)
рдФрд░ рд╣рдорд╛рд░реА рдирдИ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:
[Attributes.DynamicAuthorize] public class HomeController : Controller
Index
рджреГрд╢реНрдп рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдирд┐рдпрдВрддреНрд░рдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ:
<p> @Html.ActionLink("Test", "Test") </p> <p> @Html.ActionLink("Edit", "Edit") </p>
рдЕрдм рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ,
Ctrl + Shift + B рджрдмрд╛рдПрдВ , рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВрдЧреЗ, рд╣рдо
ASP.NET рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЙрдкрдХрд░рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
"рд╕реБрд░рдХреНрд╖рд╛" рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1 рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 2 рдирд╛рдо рдХреЗ рд╕рд╛рде 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВред рд╕рдм рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдм, рдпрджрд┐ рдЖрдк рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдХ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдПрдХреНрд╕реЗрд╕ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1 рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрд╕реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рдВрдкрд╛рджрди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 2 рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдкрд░реАрдд рд╕рдЪ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрдХреНрд╕рд░ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧреА, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рд╡реИрд╕рд╛ рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рд╡рд╣ рдЪрд╛рд╣рддреЗ рдереЗред
рдЖрдк
рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред