Tôi sử dụng lớp tĩnh để xác thực vai trò và trong cshtml tôi đã sử dụng lớp này, việc xác thực vai trò là cshtml.
Tôi có các chức năng hoặc nội dung được ủy quyền trong cơ sở dữ liệu (bởi người dùng hoặc theo vai trò) để bạn không phải triển khai lại nếu thay đổi định nghĩa truy cập.
public static class AuthorizeContent
{
public static bool AuthorizeAccessContent(string Content)
{
bool bReturn = false;
DBContext db = new DBContext();
string[] RolesUser = Roles.GetRolesForUser(WebSecurity.CurrentUserName);
foreach (AuthorizedContentRole aut in db.AuthorizedContentRole)
{
foreach (string rol in RolesUser)
{
if (aut.Role==rol && aut.Content==Content)
{
bReturn = true;
break;
}
}
}
foreach (AuthorizedContentUser aut in db.AuthorizedContentUser)
{
if (aut.UserName == WebSecurity.CurrentUserName && aut.Content == Content)
{
bReturn = true;
break;
}
}
return bReturn;
}
/// trong cshtml
@if (AuthorizeContent.AuthorizeAccessContent(Content))
{
<li class="two">
<h5>Administrator link</h5>
@Html.ActionLink("Admin secret info","Index", "Information")
</li>
}
bạn cũng có thể sử dụng một bộ lọc như [AccionAuthorize (Action = "MyContent")]
public class AccionAuthorizeAttribute : AuthorizeAttribute
{
public string Action { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
filterContext.Result = new HttpUnauthorizedResult();
else if (!AutorizacionContenido.AutorizaAccesoContenido(Action))
filterContext.Result = new HttpUnauthorizedResult();
base.OnAuthorization(filterContext);
}
}
Cảm ơn! Dưới đây là một twist - Tôi có các liên kết tab của tôi trong trang cái và tôi muốn một tab xuất hiện cho các vai trò nhất định. Bạn có biết làm thế nào tôi có thể thêm một tham chiếu đến chủ của tôi cho IPrincipal? – Ben
Sử dụng hoặc 'HttpContext.Current.user' hoặc' ViewContext.HttpContext.User' - điều đó sẽ thực hiện thủ thuật :-) – Charlino
Ahh, bây giờ tôi có thể tiếp tục với mọi thứ ... Tôi đánh giá cao sự trợ giúp! – Ben