zhaolei
2020-11-20 4a2e5b9a21940f11757be37d99f0944e240e908b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using Microsoft.AspNetCore.Http;
using System;
using System.Security.Claims;
 
namespace Bootstrap.Security.Authorization
{
    /// <summary>
    /// IButtonAuthorization 内部默认实现类
    /// </summary>
    internal class DefaultButtonAuthorization : IButtonAuthorization
    {
        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="func">通过指定用户名获取按钮授权集合回调方法</param>
        public DefaultButtonAuthorization(Func<string, string, string, bool>? func = null) => _proxy = func;
 
        private readonly Func<string, string, string, bool>? _proxy;
 
        /// <summary>
        /// 授权方法
        /// </summary>
        /// <param name="context">HttpContext 上下文</param>
        /// <param name="url">当前请求地址 Url</param>
        /// <param name="auths">当前按钮授权字符串键值</param>
        /// <returns></returns>
        public bool Authorizate(HttpContext context, string url, string auths) => Authorizate(context.User, url, auths);
 
        /// <summary>
        /// 授权方法
        /// </summary>
        /// <param name="user">当前登录用户实例</param>
        /// <param name="url">当前请求地址 Url</param>
        /// <param name="authKeys">当前按钮授权字符串键值</param>
        /// <returns></returns>
        public bool Authorizate(ClaimsPrincipal user, string url, string authKeys)
        {
            if (user.IsInRole("Administrators")) return true;
 
            var userName = user.Identity.Name;
            return string.IsNullOrEmpty(userName) ? false : (_proxy?.Invoke(userName, url, authKeys) ?? false);
        }
    }
}