二進制管理權限

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using Model.Enum;

/// <summary>
///UserPurview 的摘要說明:用戶權限
/// </summary>
public class UserPurview : System.Web.UI.Page
{

    #region 獲取用戶是否擁有權限
    /// <summary>
    /// 獲取用戶是否擁有權限,傳入權限枚舉   (與運算)
    /// </summary>
    /// <param name="_EnumUserPurview">權限枚舉</param>
    /// <param name="userPurview">用戶所擁有的權限</param>
    /// <returns></returns>
    public static bool GetUserPurview(E_UserPurview _EnumUserPurview, string userPurview = null)
    {
        int num = Convert.ToInt32(Convert.ToString(Convert.ToInt32(_EnumUserPurview), 2));
        
        if (string.IsNullOrEmpty(userPurview))
        {
            //獲取當前用戶權限
            userPurview = GetUserPurview(Convert.ToInt32(HttpContext.Current.Session["uid"] ?? "0"));
        }

        if (!string.IsNullOrEmpty(userPurview))
        {
            int User_Purview = Convert.ToInt32(userPurview);

            if ((User_Purview & num) != 0)
            {
                return true;
            }
            return false;
        }
        return false;
    }
    #endregion

    
    
    #region 添加權限
    /// <summary>
    /// 添加權限     (或運算)
    /// </summary>
    /// <param name="_E_UserPurview">權限枚舉</param>
    /// <param name="uid">修要修改權限用戶的uid</param>
    /// <returns></returns>
    public static bool AddUserPurview(E_UserPurview _E_UserPurview, int uid)
    {
        string oldUserPurview = GetUserPurview(uid);
        int UserPurview = Convert.ToInt32(oldUserPurview);
        UserPurview = UserPurview | Convert.ToInt32((Convert.ToString(Convert.ToInt32(_E_UserPurview), 2)));
        bool s = SetUserPurview(UserPurview.ToString(), uid);
        return s;
    }
    #endregion

    #region 刪除權限
    /// <summary>
    /// 刪除權限   (求補、與運算)
    /// </summary>
    /// <param name="_E_UserPurview">須要刪除的權限</param>
    /// /// <param name="uid">修要修改權限用戶的uid</param>
    /// <returns></returns>
    public static bool DeleteUserPurview(E_UserPurview _E_UserPurview, int uid)
    {
        string oldUserPurview = GetUserPurview(uid);
        int UserPurview = Convert.ToInt32(oldUserPurview);
        UserPurview = UserPurview & (~Convert.ToInt32((Convert.ToString(Convert.ToInt32(_E_UserPurview), 2))));
        bool s = SetUserPurview(UserPurview.ToString(), uid);
        return s;
    }
    #endregion


    #region 將用戶權限寫入數據庫
    /// <summary>
    /// 將用戶權限寫入數據庫
    /// </summary>
    /// <param name="userPuerview"></param>
    /// <returns></returns>
    public static bool SetUserPurview(string userPuerview, int uid)
    {
        try
        {
            int parentId = Convert.ToInt32(HttpContext.Current.Session["uid"] ?? "0");
            string sql = "UPDATE User SET UserPurview=@userPuerview WHERE UID =@uid and (parentid=@parentId or uid=@parentId)";
            SqlParameter[] param = new SqlParameter[] { 
                new SqlParameter("@userPuerview",userPuerview),
                new SqlParameter("@uid",uid),
                new SqlParameter("@parentId",parentId)
            };
            CDataAccess.ExecSql(sql, param);
            return true;
        }
        catch 
        {
            return false;
        }
    }
    #endregion


    #region 根據用戶uid查詢用戶權限
    /// <summary>
    /// 根據用戶uid查詢用戶權限
    /// </summary>
    /// <param name="uid"></param>
    /// <returns></returns>
    public static string GetUserPurview(int uid)
    {
        try
        {
            int parentId = Convert.ToInt32(HttpContext.Current.Session["uid"] ?? "0");
            string sql = "select User from User where uid =@uid and (ParentID=@parentid or uid=@parentid)";
            SqlParameter[] param = new SqlParameter[] { 
                new SqlParameter("@uid",uid),
                new SqlParameter("@parentid",parentId)
            };
            string userPurview = CDataAccess.ExecuteScalar(sql, param).ToString();
            return userPurview;
        }
        catch 
        {
            return "0";
        }
    }

    #endregion
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model.Enum
{
    public enum E_UserPurview
    {
        /// <summary>
        /// 可否看到價格 
        /// </summary>
        price_enable = 1,
        /// <summary>
        /// 支付權限
        /// </summary>
        checkout_enable = 2,
        /// <summary>
        /// 修改查看本身帳戶的權限
        /// </summary>
        account_enable = 4
    }
}

 注意:枚舉值類型只能是1,2,4,8,....html

若是用3 二進制是11,意味着有兩種權限,因此這裏捨棄不用(位數表明權限)sql

 

參考:http://www.cnblogs.com/qfcndtt/archive/2012/08/03/2621713.html數據庫

相關文章
相關標籤/搜索